
// スピンするローダアクション
var _spinnerActive = function(t) {
    //e.preventDefault();

    var $this = $(t);
    var $thisHref = $(t).attr("href");
    var $hasIcon = $(t).children("i");
    var $spinnerIcon = $("<i>").addClass("icon-spinner icon-spin white bigger-125");

    // ボタンの中に回転するアイコンを埋め込むアクション
    if ($hasIcon) {
        $hasIcon.hide();
    };
    $this.addClass("disabled").prepend($spinnerIcon);
    return $spinnerIcon;
};

var _spinnerInActive = function(t, $spinnerIcon) {
    var $this = $(t);
    var $hasIcon = $(t).children("i");
    $hasIcon.show();
    $spinnerIcon.remove();
    $this.removeClass("disabled")
};

var _loadingFuc = function() {
    $.blockUI({
        message:'<i class="icon-spinner icon-spin white bigger-125"></i>　処理中です...',
        css: {
            border: 'none',
            padding: '15px',
            backgroundColor: '#000',
            '-webkit-border-radius': '10px',
            '-moz-border-radius': '10px',
            opacity: .5,
            color: '#fff',
            'z-index': 2100
        },
        overlayCSS:  {
            'z-index': 2000
        }
    });
};

// ajax処理連打防止
$(function() {
    jQuery.extend({
        ajaxSingle: (function (options) {
            var ajaxSending = false;
            return function (options) {
                try {
                    if (!ajaxSending) {
                        ajaxSending = true;
                        _loadingFuc();
                        /* options.completeの最後に、フラグを解除する設計に。 */
                        options.complete = (function () {
                            var complete = typeof(options.complete) == "function" ? options.complete : function (a, b) {
                            };
                            return function (a, b) {
                                setTimeout(function() {
                                    ajaxSending = false;
                                    $.unblockUI();
                                }, 1000);
                            };
                        })();
                        $.ajax(options);
                    } else {
                        //console.log("重複チェック...");
                        // フラグがあるときは何も実行しない。
                    }
                } catch (e) {
                    setTimeout(function() {
                        ajaxSending = false;
                        $.unblockUI();
                    }, 1000);
                }
            };
        })()
    });

    jQuery.extend({
        ajaxSpinner: (function (options) {
            var ajaxSending = false;
            var spinner;
            return function (options) {
                try {
                    if (!ajaxSending) {
                        ajaxSending = true;
                        if(options.spinnerTarget != undefined) spinner = _spinnerActive(options.spinnerTarget);
                        /* options.completeの最後に、フラグを解除する設計に。 */
                        options.complete = (function () {
                            var complete = typeof(options.complete) == "function" ? options.complete : function (a, b) {
                            };
                            return function (a, b) {
                                setTimeout(function() {
                                    ajaxSending = false;
                                    if(options.spinnerTarget != undefined) _spinnerInActive(options.spinnerTarget, spinner);
                                }, 1000);
                            };
                        })();
                        $.ajax(options);
                    } else {
                        //console.log("重複チェック...");
                        // フラグがあるときは何も実行しない。
                    }
                } catch (e) {
                    setTimeout(function() {
                        ajaxSending = false;
                        if(options.spinnerTarget != undefined) _spinnerInActive(options.spinnerTarget, spinner);
                    }, 1000);
                }
            };
        })()
    });
});